package br.com.esporte.view.site.component.menu.menuTopo;

import java.util.List;

import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.Model;

import br.com.esporte.model.TipoEsporteEnum;
import br.com.esporte.view.infra.component.ComponenteGenerico;
import br.com.esporte.view.infra.html.HtmlParam;
import br.com.esporte.view.site.template.util.ConstantsTemplate;

/**
 * 
 * @author Milton Domingues
 *
 */
public class MenuTopoComponente extends ComponenteGenerico {

	private static final long serialVersionUID = 4318515789904425346L;
	private static final String LIST_MENUS_ID = "listMenu";
	public static final String LINK_MENU_ID = "linkMenu";
	private static final String LINK_DESCRICAO_ID = "descricaoLink";
	private List<MenuTopo> menus;
	private TipoEsporteEnum tipoEsporte;

	public MenuTopoComponente(String id, List<MenuTopo> menus, TipoEsporteEnum tipo) {
		super(id);
		tipoEsporte = tipo;
		this.menus = menus;
		montarComponente();
	}

	private ListView<MenuTopo> criarListaMenus(List<MenuTopo> menus){
		ListView<MenuTopo> list = new ListView<MenuTopo>(LIST_MENUS_ID, menus) {

			private static final long serialVersionUID = 6167899538124262540L;

			@Override
			protected void populateItem(ListItem<MenuTopo> item) {
				MenuTopo menu = item.getModelObject();
				item.add(new AttributeAppender(HtmlParam.CLASS, new Model<String>(getCssMenu(getTipoEsporte())), " "));
				if(menu.getLink().get(LINK_DESCRICAO_ID) == null){
					menu.getLink().add(new Label(LINK_DESCRICAO_ID, menu.getDescricao()));
				}
				item.add(menu.getLink());
			}
		};
		return list;
	}

	private String getCssMenu(TipoEsporteEnum tipoEsp){
		StringBuilder css = new StringBuilder();
		css.append(ConstantsTemplate.BG_ESPORTE_PEQUENO);
		css.append("-");
		css.append(tipoEsp.getCodigo());
		return css.toString();
	}

	public List<MenuTopo> getMenus() {
		return menus;
	}

	public TipoEsporteEnum getTipoEsporte() {
		return tipoEsporte;
	}

	@Override
	public void montarComponente() {
		add(criarListaMenus(getMenus()));
	}

	public void setMenus(List<MenuTopo> menus) {
		this.menus = menus;
	}

	public void setTipoEsporte(TipoEsporteEnum tipoEsporte) {
		this.tipoEsporte = tipoEsporte;
	}

}
